package com.thinkcoder.Interceptor;



import com.thinkcoder.model.constans.ErrorStatus;
import com.thinkcoder.model.constans.TokenConstant;

import com.thinkcoder.protocol.Result;
import com.thinkcoder.util.RedisUtil;
import com.thinkcoder.util.JsonUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;


public class AuthInterceptor implements HandlerInterceptor {

    @Autowired
    private RedisUtil redisUtil;

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String token = request.getHeader(TokenConstant.TOKEN);

        //从redis取出token
//        UserToken userToken = (UserToken) redisUtil.get(token);
//        if(userToken==null){
//            setResponse(response,ErrorStatus.UNAUTHORIZED.getMessage());
//            return false;
//        }
//        if(userToken.getIsOut()==1){
//            setResponse(response,"您的账号已在其他设备登录！请重新登录");
//            return false;
//        }
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { }


    private void setResponse(HttpServletResponse response, String message){
        Result result = Result.buildFailure(ErrorStatus.UNAUTHORIZED.getCode(), message);
        String s = JsonUtil.toJson(result);
        try {
            response.setContentType("Application/json;charset=UTF-8");
            response.getWriter().write(s);
            response.getWriter().flush();
            response.getWriter().close();
        } catch (IOException ioException) {
            ioException.printStackTrace();
        }
    }
}
